package com.qianfeng.teachdemo.ui.touch;

import android.os.Bundle;
import android.view.MotionEvent;

import com.lidroid.xutils.util.LogUtils;
import com.qianfeng.teachdemo.R;
import com.qianfeng.teachdemo.ui.BaseActivity;


/**
 * 简介 事件分发与消费
 * android中的事件分为按键事件和触摸事件,我们今天讲的是触摸事件
 * 重要知识点
 * 1.onThouchEvent 事件由 一个Action_Down 多个ACTION_MOVE 一个ACTION_UP事件组成
 * 2.事件分发和消费的三个重要方法:
 * 2.1.public boolean dipatchTouchEvent 分发事件;
 * 2.2.public boolean onInterceptToucheEvent() 拦截事件
 * 2.3 public boolean onTouchEvent() 处理事件
 */
public class TouchActivity extends BaseActivity {
    public static final String TAG = "TouchActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_touch);
    }

    /**
     * 事件处理
     * 分析: 处理流程:----->>正常情况下 顶层View --->> VIEWGROUP ----> Activity
     * @param event
     * @return
     */
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        LogUtils.e(TAG + "--->>>onTouchEvent" );
        return super.onTouchEvent(event);
    }

    /**
     * 事件分发 改方法以隧道方式(从根元素一次往下传递 直到最内层子元素或者正在中间某一元素中由于某一条件停止)
     * 如果 return ture 事件回分发给当前view 并且由dispatchTouchEvent方法进行消费 同时事件会停止向下传递)
     * 如果 return false  事件分发分两种情况;
     *     1.如果当前的view获取的事件直接来自Activity 在会将事件返回给Activity的ontouhEvent 进行消费
     *     2.如果当前view获取的事件来自外层父控件 在事件返回给父view的onTouchEvent方法
     * 如果返回系统默认的 super.disTouchEvent 事件会自动的分发给当前的view的 onInterceptTouchEvent方式
     * @param event
     * @return
     */
    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        LogUtils.e(TAG + "dispatchTouchEvent");
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                LogUtils.e(TAG + "dispatchTouchEvent"  + ":ACTION_DOWN");
                break;
            case MotionEvent.ACTION_MOVE:
                LogUtils.e(TAG + "dispatchTouchEvent"  + ":ACTION_MOVE");
                break;
            case MotionEvent.ACTION_UP:
                LogUtils.e(TAG + "dispatchTouchEvent"  + ":ACTION_UP");
                break;
        }
        return super.dispatchTouchEvent(event);
    }
}
